#ifndef WIDGET_H_
#define WIDGET_H_

#include <stdio.h>
#include <list>
#include <iostream>

#include "SDL/SDL.h"
#include "SDL/SDL_image.h"

#include "Parcel.h"
#include "Event.h"
#include "../common/utils/SurfaceUtils.h"
#include "SDL/SDL_gfxPrimitives.h"

class Widget {

protected:

	void initParcel(int posX, int posY);

	SDL_Surface* surface;
	Widget* parent;
	bool drawBorders;

    void getPosition(Parcel* position);

    /*
     * Porque no deberia esta aca:
     * El border limits usa la superficie del widget. y este puede ser NULO
     * Lo que da como pregunta si esta bien que un widget no tenga surface o sea nula..
     * Hay un problema de construccion aca. no deberia pasar eso y para evitar problemas
     * tengo q hacer esto re privado.
     */
    Parcel* getBorderLimits();

public:
    Parcel* parcel;
    Widget(int posX, int posY, SDL_Surface *surface, Widget *parent = NULL, bool drawBorders = false);
    Widget(int posX, int posY, std::string imageSurface, Widget *parent = NULL, bool drawBorders = false);
    Widget(Color color, int w, int h, int posX, int posY, Widget *parent = NULL, bool drawBorders = false);

    virtual void handleEvent(Event event);
    virtual void resolve() ;
    virtual void showOn(SDL_Surface *canvasSurface);
    bool isMouseOver(Event event) const;
    virtual ~Widget();

    virtual Parcel* getBoundaries();

};

#endif /* WIDGET_H_ */
